package com.study.spark.ml.basic.matrix

import breeze.linalg.{DenseMatrix, argmax, det, max, sum}
import breeze.numerics.{ceil, floor}
import org.apache.spark.ml.linalg.{Matrices, Matrix}

/**
 * 矩阵示例
 *
 * @author stephen
 * @date 2019-08-22 11:21
 */
object MatrixDemo {

  def main(args: Array[String]): Unit = {
    // 密集矩阵
    val dm = DenseMatrix((1,2,3),(4,5,6))
    println(dm)
    // 零填充的矩阵
    val zeroMatrix = DenseMatrix.zeros[Int](2,3)
    println(zeroMatrix)
    // 转置
    println(dm.t)

    // 稀疏矩阵
    val sMatrix: Matrix = Matrices.sparse(3, 2, Array(0, 1, 3),
      Array(0, 1, 2), Array(5, 6, 7))
    println("sMatrixTwo: \n" + sMatrix)

    // 加法
    val a = DenseMatrix((1,2),(3,4))
    val b = DenseMatrix((2,2),(2,2))
    val c = a + b
    println(c)

    // 乘法
    println(a*b)

    // 比较
    println(a <:< b)

    // 按位加
    println(a :+= 1)

    // 求和
    println(sum(a))

    // 最大值
    println(max(a))

    // 最大值的索引
    println(argmax(a))

    // 向上取整
    println(ceil(a))

    // 向下取整
    println(floor(a))

    // 行列式 det(M)则为对角线上各元素的乘积
    println(det(a))
  }
}
